Problem
切糕
Description
经历千辛万苦小得到了一块切糕,切糕的形状是长方体,小打算拦腰将切糕切成两半分给小。出于美观考虑,小希望切面能尽量光滑且和谐。于是她找到你,希望你能帮她找出最好的切割方案。
出于简便考虑,我们将切糕视作一个长,宽,高的长方体点阵。我们将位于第层中第行,第列上的点称为,它有一个非负的不和谐值。一个合法的切面满足以下两个条件:
- 与每个纵轴有且仅有一个交点。即切面是一个函数,对于所有,,我们需指定一个切割点,且 。
- 切面需要一定的光滑性要求,即相邻纵轴上的切割点不能相距太远。对于所有 和 ,若 ,则 , 其中是给定的一个非负整数。
能有许多切面满足上面的条件,小希望找出总的切割点上的不和谐值最小的那个,即最小。
Input
第一行是三个正整数,表示切糕的长、 宽、高。第二行有一个非负整数,表示光滑性要求。接下来是个行列的矩阵,第个矩阵的第行第列是。
的数据满足,,且给出的所有的不和谐值不超过。
Output
Sample Input
1 | 2 2 2 |
Sample Output
1 | 6 |
Hint
最佳切面的为
标签:网络流
最小割
Solution
建模神题。
建图:
建层,每层的图,相邻两竖边建模如下
(图片转载自Zarxdy34)
这样如果割掉红边,右边割的边必须在绿边下面才能有流。所以割的边就限制在绿边上面了。因此这样一来,下界就满足了。
对于上界,右边的几个点反过来同种方式建边(图中只画了左侧的边)
Code
1 |
|